# 定义登录页面对象
# 定义对象库层
from selenium.webdriver.common.by import By

from base.mis.base import BasePage, BaseHandle
from until import UtilsDriver


class LoginPage(BasePage):
    def __init__(self):
        super().__init__()  # 重写初始化方法是因为在基类中包含初始化方法所以得重写
        # 用户名输入框
        self.username = By.ID, 'username'
        # 密码输入框
        self.password = By.ID, 'password'
        # 登录按钮
        self.login_btn = By.ID, 'login_button'

    """
    定位元素后必须要return返回
    """

    # 定位用户名输入框
    def find_username(self):
        return self.get_element(self.login_btn)

    # 定位输入框
    def find_password(self):
        return self.get_element(self.login_btn)

    # 定位登录按钮
    def find_login_btn(self):
        return self.get_element(self.login_btn)


# 定义操作层
class LoginHandle(BaseHandle):
    def __init__(self):
        self.login_page = LoginPage()  # 实例化对象库层

    # 输入用户名
    def input_username(self, username):
        self.input_text(self.login_page.find_username(), username)

    # 输入密码
    def input_password(self, password):
        self.input_text(self.login_page.find_password(), password)

    # 点击登录
    def click_login_btn(self):
        """
        页面上的登录按钮若不滑动验证码无法点击，滑动验证码无法实现，在这里需要使用 js 来删除 disabled 属性才能点击
        :return:
        """
        # 定义js
        js = "document.getElementById('inp1').removeAttribute('disabled')"
        # 使用driver.execute_script执行js（这里的driver是通过login_page来的，因为login_page继承了BasePage，BasePage又初始化了驱动driver）
        self.login_page.driver.execute_script(js)
        # 这里还可以这么写UtilsDriver.get_mis_driver().execute_script(js)

        # 点击登录按钮
        self.login_page.find_login_btn().click()


# 定义业务层
class LoginProxy:
    def __init__(self):
        self.login_handle = LoginHandle()  # 实例化操作层

    # 登录业务操作
    def login(self, username, password):
        self.login_handle.input_username(username)
        self.login_handle.input_password(password)
        self.login_handle.click_login_btn()
